import {login, logout, getInfo} from "@/api/login";
import {getToken, setToken, removeToken} from "@/utils/auth";

const user = {
    state: {
        token: getToken(),
        name: "",
        roles: []
    },

    mutations: {
        SET_TOKEN: (state, token) => {
            state.token = token;
        },
        SET_NAME: (state, name) => {
            state.name = name;
        },
        SET_ROLES: (state, roles) => {
            state.roles = roles;
        }
    },

    actions: {
        // 登录
        Login({commit}, userInfo) {
            const username = userInfo.username.trim();
            return new Promise((resolve, reject) => {
                login(username, userInfo.password).then(data => {
                   if (data.code === 1) {
                      setToken(data.data.token);
                      sessionStorage.setItem("ledaoCityId",data.data.cityId);
                      sessionStorage.setItem("ledaoCityName",data.data.cityName);
                      commit("SET_TOKEN", data.data.token);
                   }
                   resolve(data);
                }).catch(error => {
                    reject(error);
                });
            });
        },

        // 获取用户信息
        GetInfo({commit, state}) {
            return new Promise((resolve, reject) => {
                getInfo(state.token).then(response => {
                    const data = response.data;
                    if (data.role && data.role.length > 0) { // 验证返回的roles是否是一个非空数组
                        commit("SET_ROLES", data.role);
                    } else {
                        reject("getInfo: role must be a non-null array !");
                    }
                    commit("SET_NAME", data.name);
                    resolve(response);
                }).catch(error => {
                    reject(error);
                });
            });
        },

        // 登出
        LogOut({commit, state}) {
            return new Promise((resolve, reject) => {
                logout(state.token).then(() => {
                    commit("SET_TOKEN", "");
                    commit("SET_ROLES", []);
                    removeToken();
                    resolve();
                }).catch(error => {
                    reject(error);
                });
            });
        },

        // 前端 登出
        FedLogOut({commit}) {
            return new Promise(resolve => {
                commit("SET_TOKEN", "");
                removeToken();
                resolve();
            });
        }
    }
};

export default user;
